package in.lib.helper; import in.lib.handler.base.RobinResponseHandler; import java.lang.ref.WeakReference; import java.util.HashMap; import android.support.v4.app.Fragment; /** * Used to manage all async http response handlers in fragments. Each API call * should have its own key set in Constants.class prefixed "RESPONSE_" * * @author callumtaylor */ @SuppressWarnings({"rawtypes", "unchecked"}) public class ResponseHelper { public final HashMap<String, WeakReference<RobinResponseHandler>> responses = new HashMap<String, WeakReference<RobinResponseHandler>>(); private static ResponseHelper instance; public static ResponseHelper getInstance() { if (instance == null) { instance = new ResponseHelper(); } System.gc(); return instance; } public RobinResponseHandler getResponse(String key) { return responses.get(key) == null ? null : responses.get(key).get(); } public void addResponse(String key, RobinResponseHandler response, Fragment fragment) { detach(key); responses.put(key, new WeakReference(response)); response.setResponseKey(key); if (fragment != null) { response.attach(fragment); } } public boolean reattach(String key, Fragment fragment) { if (responses.containsKey(key) && responses.get(key) != null && responses.get(key).get() != null) { responses.get(key).get().attach(fragment); return true; } return false; } public boolean detach(String key) { if (responses.containsKey(key) && responses.get(key) != null && responses.get(key).get() != null) { responses.get(key).get().detach(); return true; } return false; } public void removeResponse(String key) { detach(key); responses.remove(key); System.gc(); } }